package com.sky.controller.admin;

import com.sky.constant.MessageConstant;
import com.sky.exception.BaseException;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;
//通用功能的Controller层
@RestController
@RequestMapping("/admin/common")
public class CommonCotroller {

    //通过注入AliOSSUtil的对象来进行文件上传
    //因为这里的util是没有数据的 我是通过bean注解将配置文件对aliossutil进行收据注入
    //这里创建出来的对象和数据就进行了绑定
    @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) {
        //因为传入的是文件 需要使用multipartfile类型来接收 file需要根据前端传入的变量名一一对应

        //这里是获得文件的原名
        String originalFilename = file.getOriginalFilename();

        //通过uuid生成16进制的数字 防止重名覆盖 在拼接上 将文件名进行切割 获得文件后缀名
        //组成新的文件名
        String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //这里需要升级url的作用域 提前定义好
        String url = null;
        try {
            //在这里进行赋值 避免出现异常提前捕获 通过文件上传的方法传入文件在字节码文件以及文件名
            url = aliOssUtil.upload(file.getBytes(), fileName);

        } catch (IOException e) {

            //如果出现了异常 抛出文件上传异常
            throw new BaseException(MessageConstant.UPLOAD_FAILED);
        }
        //如果没抛异常 返回url文件链接
        return Result.success(url);
    }
}
